﻿using BLL;
using Model;
using Model.Auxiliar;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace HRP.Private.Funcionarios.Controlos
{
    public partial class Criar_Dados : CriarControlo
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack && Session["EmpresaActual"] != null)
            {

                Session["VistaEmpresaId"] = ((hrp_empresas)Session["EmpresaActual"]).id;

                CarregarDepartamentos();
                CarregarCargos();
                CarregarPaises();
            }
            Page.PreRender += Page_PreRender;
            departamentosList.SelectedIndexChanged += departamentosList_SelectedIndexChanged;
        }

        void departamentosList_SelectedIndexChanged(object sender, EventArgs e)
        {
            CarregarCargos();
        }

        void Page_PreRender(object sender, EventArgs e)
        {
            if (Session["EmpresaActual"] != null && Session["VistaEmpresaId"] != null)
            {
                hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                if (empresa.id != (int)Session["VistaEmpresaId"])//verifica se a empresa foi mudada
                {
                    Session["VistaEmpresaId"] = empresa.id;
                    CarregarDepartamentos();
                    CarregarCargos();
                }
            }

        }

        void CarregarPaises()
        {
            paisDDL.DataSource = Utilidade_BLL.Instance.ObterListaPaises();
            paisDDL.DataBind();
        }

        void CarregarDepartamentos()
        {
            List<hrp_departamentos> listaDep = new List<hrp_departamentos>();
            if (Session["EmpresaActual"] != null)
            {
                hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                listaDep.AddRange(Departamento_BLL.Instance.obterDepartamentosEmpresa((int)Session["idclient"], empresa.id, false, false).AsEnumerable());
            }
            departamentosList.DataSource = listaDep;
            departamentosList.DataBind();
        }

        void CarregarCargos()
        {
            List<Cargo> listaCargos = new List<Cargo>();
            if (departamentosList.Items.Count > 0)
            {
                hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                int departamentoActual = 0;
                Int32.TryParse(departamentosList.SelectedItem.Value, out departamentoActual);
                listaCargos.AddRange(Cargo_BLL.Instance.obterCargosDepartamento(empresa.id, departamentoActual, true).AsEnumerable());
            }
            cargoList.DataSource = listaCargos;
            cargoList.DataBind();
        }

        public override bool Valida()
        {
            return Page.IsValid;
        }

        public override int Gravar()
        {
            if (Session["EmpresaActual"] != null && Session["idclient"] != null && Session["userid"] != null)
            {
                hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                int clientID = (int)Session["idclient"];
                string userID = Session["userid"].ToString();
                string nome = nomeTb.Text.Trim();
                string morada = moradaTb.Text.Trim();
                string codigopostal = codigoPostalTb.Text.Trim();
                int pais = Convert.ToInt32(paisDDL.SelectedValue);
                string nomepais = paisDDL.SelectedItem.Text.Trim();
                string mail = emailTb.Text.Trim();
                int empresa_id = empresa.id;
                string tlf = telefoneTb.Text.Trim();
                string tlm = telemovelTb.Text.Trim();
                string nib = nibTb.Text.Trim();
                string iban = ibanTb.Text.Trim();
                int numFuncionario = Convert.ToInt32(numFucTb.Text.Trim());
                double nif = Convert.ToDouble(nifTb.Text.Trim());
                double ss = Convert.ToDouble(ssTb.Text.Trim());
                int cargo = Convert.ToInt32(cargoList.SelectedValue);
                string obs = obsTb.Text;

                //caminho foto
                string finalPath = "";
                //TODO: mimetype
                if (FileUpload1.HasFile && FileUpload1.PostedFile.ContentType.StartsWith("image"))
                {
                    string fileName = FileUpload1.PostedFile.FileName;
                    FileInfo fi = new FileInfo(fileName);
                    string ext = fi.Extension;
                    string path = Server.MapPath("/images/" + empresa.id + "/") + Guid.NewGuid().ToString()+ext;
                    string folderPath = Server.MapPath("/images/" + empresa.id + "/");
                    if (!System.IO.Directory.Exists(folderPath))
                    {
                        System.IO.Directory.CreateDirectory(folderPath);
                    }
                    FileUpload1.PostedFile.SaveAs(path);
                    //gravar na bd caminho de imagem
                    int index = path.LastIndexOf("images");
                    finalPath = path.Substring(index - 1, (path.Count() - index + 1));
                }
                else
                {
                    finalPath = "'\'assets'\'img'\'avatar'\'masarie.jpg";                
                }


                int funcionarioId = Funcionario_BLL.Instance.inserirFuncionario(clientID, userID, Request.UserHostAddress, nome, morada, codigopostal, nomepais, pais, tlf, tlm,
                    mail, nib, iban, cargo, numFuncionario, obs, finalPath, empresa_id, nif, ss);

                return funcionarioId;
            }
            return -1;
        }
    }
}